/**
 * Markdown到HTML转换工具 - 专门处理AI输出的Markdown格式
 */

export interface ConversionOptions {
  applyStandardFormat?: boolean;
  preserveOriginalStyles?: boolean;
}

/**
 * 将Markdown格式转换为标准HTML格式
 */
export function convertMarkdownToHTML(
  markdownContent: string, 
  options: ConversionOptions = { applyStandardFormat: true }
): string {
  let htmlContent = markdownContent;

  // 1. 处理一级标题 (# 标题 或 **标题**)
  htmlContent = htmlContent.replace(
    /^#\s+(.+)$/gm,
    '<h1 style="font-family: \'SimHei\', \'黑体\', sans-serif; font-size: 16pt; font-weight: bold; text-align: left; margin-top: 1em; margin-bottom: 1em; line-height: 1.5;">$1</h1>'
  );

  // 处理粗体标题作为一级标题
  htmlContent = htmlContent.replace(
    /^\*\*([^*]+)\*\*$/gm,
    '<h1 style="font-family: \'SimHei\', \'黑体\', sans-serif; font-size: 16pt; font-weight: bold; text-align: left; margin-top: 1em; margin-bottom: 1em; line-height: 1.5;">$1</h1>'
  );

  // 2. 处理二级标题 (## 标题)
  htmlContent = htmlContent.replace(
    /^##\s+(.+)$/gm,
    '<h2 style="font-family: \'SimHei\', \'黑体\', sans-serif; font-size: 14pt; font-weight: bold; text-align: left; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.5;">$1</h2>'
  );

  // 3. 处理三级标题 (### 标题) - 按二级标题处理
  htmlContent = htmlContent.replace(
    /^###\s+(.+)$/gm,
    '<h2 style="font-family: \'SimHei\', \'黑体\', sans-serif; font-size: 14pt; font-weight: bold; text-align: left; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.5;">$1</h2>'
  );

  // 4. 处理四级及以下标题
  htmlContent = htmlContent.replace(
    /^#{4,}\s+(.+)$/gm,
    '<h2 style="font-family: \'SimHei\', \'黑体\', sans-serif; font-size: 14pt; font-weight: bold; text-align: left; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.5;">$1</h2>'
  );

  // 5. 处理分隔线
  htmlContent = htmlContent.replace(/^---+$/gm, '<hr style="border: none; border-top: 1px solid #ccc; margin: 1em 0;">');

  // 6. 处理无序列表
  htmlContent = htmlContent.replace(
    /^[\s]*[-*+]\s+(.+)$/gm,
    '<li style="font-family: \'FangSong_GB2312\', \'仿宋_GB2312\', \'仿宋\', serif; font-size: 12pt; line-height: 1.5; margin-bottom: 0.25em;">$1</li>'
  );

  // 7. 处理有序列表
  htmlContent = htmlContent.replace(
    /^[\s]*\d+\.\s+(.+)$/gm,
    '<li style="font-family: \'FangSong_GB2312\', \'仿宋_GB2312\', \'仿宋\', serif; font-size: 12pt; line-height: 1.5; margin-bottom: 0.25em;">$1</li>'
  );

  // 8. 包装连续的列表项
  htmlContent = wrapListItems(htmlContent);

  // 9. 处理粗体文本
  htmlContent = htmlContent.replace(
    /\*\*([^*]+)\*\*/g,
    '<strong>$1</strong>'
  );

  // 10. 处理斜体文本
  htmlContent = htmlContent.replace(
    /\*([^*]+)\*/g,
    '<em>$1</em>'
  );

  // 11. 处理段落 - 将非HTML标签的文本行转换为段落
  const lines = htmlContent.split('\n');
  const processedLines: string[] = [];

  for (let i = 0; i < lines.length; i++) {
    const line = lines[i].trim();
    
    // 跳过空行
    if (!line) {
      processedLines.push('');
      continue;
    }

    // 跳过已经是HTML标签的行
    if (line.startsWith('<') && line.endsWith('>')) {
      processedLines.push(line);
      continue;
    }

    // 跳过列表项（已经处理过）
    if (line.includes('<li ')) {
      processedLines.push(line);
      continue;
    }

    // 将普通文本行转换为段落
    if (line.length > 0) {
      processedLines.push(
        `<p style="font-family: 'FangSong_GB2312', '仿宋_GB2312', '仿宋', serif; font-size: 12pt; text-align: justify; text-indent: 2em; line-height: 1.5; margin-bottom: 0.5em;">${line}</p>`
      );
    }
  }

  return processedLines.join('\n');
}

/**
 * 包装连续的列表项为ul或ol标签
 */
function wrapListItems(content: string): string {
  const lines = content.split('\n');
  const result: string[] = [];
  let inList = false;
  let listType = '';

  for (let i = 0; i < lines.length; i++) {
    const line = lines[i];

    if (line.includes('<li ')) {
      if (!inList) {
        // 开始新列表
        listType = 'ul'; // 默认无序列表
        result.push('<ul>');
        inList = true;
      }
      result.push(line);
    } else {
      if (inList) {
        // 结束列表
        result.push('</ul>');
        inList = false;
      }
      result.push(line);
    }
  }

  // 如果文件结束时还在列表中
  if (inList) {
    result.push('</ul>');
  }

  return result.join('\n');
}

/**
 * 检测内容是否为Markdown格式
 */
export function isMarkdownFormat(content: string): boolean {
  const markdownPatterns = [
    /^#+\s+/m,           // 标题
    /^\*\*[^*]+\*\*$/m,  // 粗体标题
    /^[-*+]\s+/m,        // 无序列表
    /^\d+\.\s+/m,        // 有序列表
    /^---+$/m,           // 分隔线
    /\*\*[^*]+\*\*/,     // 粗体文本
    /\*[^*]+\*/          // 斜体文本
  ];

  return markdownPatterns.some(pattern => pattern.test(content));
}

/**
 * 智能格式转换 - 自动检测并转换
 */
export function smartFormatConversion(content: string): {
  convertedContent: string;
  wasMarkdown: boolean;
  conversionApplied: boolean;
} {
  const wasMarkdown = isMarkdownFormat(content);
  
  if (wasMarkdown) {
    const convertedContent = convertMarkdownToHTML(content);
    return {
      convertedContent,
      wasMarkdown: true,
      conversionApplied: true
    };
  }

  return {
    convertedContent: content,
    wasMarkdown: false,
    conversionApplied: false
  };
}

/**
 * 清理和优化HTML内容
 */
export function cleanupHTML(content: string): string {
  let cleaned = content;

  // 移除多余的空行
  cleaned = cleaned.replace(/\n\s*\n\s*\n/g, '\n\n');

  // 确保标签正确闭合
  cleaned = cleaned.replace(/<(h[1-6]|p|li|ul|ol)([^>]*)>([^<]*?)(?=<|$)/g, '<$1$2>$3</$1>');

  // 移除空的段落标签
  cleaned = cleaned.replace(/<p[^>]*>\s*<\/p>/g, '');

  return cleaned.trim();
}